<?php

/**
 * Class Users
 *
 * Klasa odpowiedzialna za zdarzenia zwiazane z obsluga uzytkownikow
 *
 * @author Marcin Baniowski
 * @since 19.03.2011
 * @version 0.0
 * @name Users
 */
class Users extends System {
	function __construct() {
		parent::__construct();
	}

	/**
	 * Checks if user is logged ($_SESSION['logged'] set)
	 *
	 * @return bool
	 */
	public function CheckIfLogged() {
		if (isset($_SESSION['logged']))
			return true;
		else
			return false;
	}

	/**
	 * Obsluguje logowanie do aplikacji.
	 *
	 * @param obj $smarty
	 * @param obj $users
	 */
	public function ObsluzLogowanie(&$smarty, &$users) {
		$smarty->assign("pagetitle", SYSTEM_NAME . " - Logowanie");
		$smarty->assign("form_link", LOGIN_PAGE);
		if ($users->CheckIfLogged()) { // byl zalogowany
			$_REQUEST = array();
			$this->WyswietlTresc($smarty);
			die();
		}

		if (isset($_REQUEST['wylogowano'])) { // poprawne wylogowanie
			$smarty->assign("message", "Zostałeś poprawnie wylogowany(a)!");
		}
		
		elseif (isset($_POST['zaloguj']) && trim($_POST['username'] != "") &&
				trim($_POST['password']) != "" && $_POST['username'] != "U?ytkownik") { // przeslano dane
			if ($users->LoginTry($_POST['username'], $_POST['password'])) { // zalogowano poprawnie
				if (isset($_REQUEST['redirect_back']) && strlen($_REQUEST['redirect_back']) > 0)
					$this->Redirect(urldecode($_REQUEST['redirect_back']));
				elseif (isset($_REQUEST['przekierowanie']) && strlen(urldecode($_REQUEST['przekierowanie'])) > 1) {
					$this->WyswietlTresc($smarty);
					die();
				} else {
					$this->WyswietlTresc($smarty);
					die();
				}
			}
			else  // nieprawidlowe dane
				$smarty->assign("message", "Błędna nazwa użytkownika/hasło!");
		}
		if ((isset($_REQUEST['przekierowanie']) && strlen(urldecode($_REQUEST['przekierowanie'])) > 1)
				|| (isset($_REQUEST['pokaz']) && $_REQUEST['pokaz'] != "pulpit")) {
			$smarty->assign("form_link", $_SERVER['REQUEST_URI']);
			$smarty->assign("message", "Zaloguj się, by uzyskać dostęp do tego modułu!");
		}
		else
			$smarty->assign("form_link", '?pokaz=pulpit');

		if (!$this->BrowserCompatibilityCheck()) {
			$smarty->assign('message', 'Twoja przeglądarka nie spełnia <br />wymagań technicznych systemu!
										 <p>Pobierz za darmo <br /><a target="_blank" href="http://firefox.pl">Firefox-a</a>,
										 <a target="_blank" href="http://www.opera.com/download/">Oper?</a>,
										 <a href="http://www.apple.com/pl/safari/" target="_blank">Safari</a><br />
										 lub <a href="http://www.google.com/chrome/">Google Chrome</a><br />
										 w polskiej wersji j?zykowej!</p>');
			$smarty->assign('disable_button', true);
		}

		$smarty->display("login.tpl");
	}

	/**
	 * Checks if the login try has been sucessfull
	 *
	 * @param str $username
	 * @param str $password
	 * @return bool
	 */
	public function LoginTry($username, $password) {
		if (!isset($_SESSION['logged'])) {
			$username = trim(DB::SecureUserInput($username));
			$password = trim(DB::SecureUserInput($password));
			//if ($this->password_hashing == true)
				$password = md5($password);
			// TODO - tu skończone
			$result = $this->db->rawSelect("SELECT * FROM " . DB_PREFIX . "users WHERE username = '$username' AND deleted = 0");
//			echo Profiler::debug($result);exit;

			if ($result == true) {
				if ($result['password'] == $password) {
					if ($this->ActivateUser($result['user_id']))  // all data is correct, activating user
						return true;
					else
						return false;
				}
				else // bad password
					return false;
			}
			else {   // other error with connection
				return false;
			}
		}  // already logged in
		else
			return true;
	}

	/**
	 * Activates user with given id, sets new cookie and generates new session id.
	 *
	 * @param int $id
	 * @return bool
	 */
	public function ActivateUser($id) {
		$_SESSION['logged'] = 1;
		$_SESSION['user_id'] = $id;
		$_SESSION['username'] = $result['zdrobnienie'];
		$_SESSION['fullname'] = $result['imie'] . ' ' . $result['nazwisko'];
		$_SESSION['user'] = $result;



		// updating session_id in cookie
		if (isset($_POST['save_login'])) {
			$session_id = session_id();

			setcookie($this->cookie_name, $session_id, time() + (60 * 60 * 24 * 1));

			$this->db->rawQuery("UPDATE ".DB_PREFIX."users SET last_session_id = '" . $session_id . "',
								 			last_activity = NOW() WHERE user_id = $id");
		} else {
			$this->db->rawQuery("UPDATE ".DB_PREFIX."users SET last_activity = NOW() WHERE user_id = $id");
		}

		//$this->DodajLogowanie($id);

		return true;
	}

	/**
	 * Dodaj rekord z informacja o logowaniu uzytkownika do historii logowan
	 *
	 * @param int $id
	 * @return bool
	 */
	public function DodajLogowanie($id) {
		$cols[] = "user_id";
		$cols[] = "data";
		$cols[] = "ip";
		$vals[] = $id;
		$vals[] = "NOW()";
		$vals[] = $_SERVER['REMOTE_ADDR'];

		return $this->DoInsert('tbl_logons', $cols, $vals);
	}

}

?>
